package com.esun.dao.mapper;

import com.esun.dao.eo.BaseEo;
import com.esun.dao.eo.ExampleEo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 基础mapper
 * @author John.xiao
 * @date 2021/8/5 14:50
 */
@Mapper
public interface BaseMapper<T extends BaseEo> {
	/**
	 * 通过条件查询数据库行数
	 *
	 * @param entity 实例对象
	 * @return 通过条件查询数据库行数
	 */
	int queryCount(T entity);

	/**
	 * 通过ID查询单条数据
	 *
	 * @param id 主键
	 * @return 实例对象
	 */
	T queryById(Integer id);

	/**
	 * 查询指定行数据
	 *
	 * @param offset 查询起始位置
	 * @param limit 查询条数
	 * @return 对象列表
	 */
	List<T> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);


	/**
	 * 通过实体作为筛选条件,根据排序条件批量查询
	 *
	 * @param  entity 实例对象列表
	 * @return 对象列表
	 */
	List<T> queryBatchBySort(T entity);

	/**
	 * 通过实体作为筛选条件查询
	 *
	 * @param entity 实例对象
	 * @return 数据行数
	 */
	List<T> queryAll(T entity);

	/**
	 * 新增数据
	 *
	 * @param entity 实例对象
	 * @return 影响行数
	 */
	int insert(T entity);

	/**
	 * 批量新增数据（MyBatis原生foreach方法）
	 *
	 * @param entities List<ExampleEo> 实例对象列表
	 * @return 影响行数
	 */
	int insertBatch(@Param("entities") List<T> entities);

	/**
	 * 批量新增或按主键更新数据（MyBatis原生foreach方法）
	 *
	 * @param entities List<ExampleEo> 实例对象列表
	 * @return 影响行数
	 */
	int insertOrUpdateBatch(@Param("entities") List<T> entities);

	/**
	 * 修改数据
	 *
	 * @param entity 实例对象
	 * @return 影响行数
	 */
	int update(T entity);

	/**
	 * 通过主键删除数据
	 *
	 * @param id 主键
	 * @return 影响行数
	 */
	int deleteById(Integer id);

	/**
	 * 根据ID批量删除记录
	 *
	 * @param entities  List<ExampleEo> 实例对象列表
	 * @return 影响行数
	 */
	int deleteByIdBatch(@Param("entities") List<T> entities);

	/**
	 * 按照条件删除记录
	 *
	 * @param entity 实例对象
	 * @return 影响行数
	 */
	int delete(T entity);
	/**
	 * 查询未解决日志总数
	 */
	int errorTotal(T entity);
}
